
/**********************************************************************************\
** 文件名称: LLTask.h
** 创建人员: YCG
** 创建日期: 2019-03-14
** 文档描述:
** 版本代号: V0.1
** 版本说明: 初始版本
\********************************************************************************/
#ifndef __L_L_TASK_H_
#define __L_L_TASK_H_

#include "main.h"

#define U32_BEGIN   0xa86923c3

#define LL_DEBUG

#ifdef  LL_DEBUG
#include "MessageOut.h"
#include "oled.h"
#define  LL_Printf(fmt,...)   Uprintf(fmt,__VA_ARGS__)
#else
#define  LL_Printf(...)
#endif

#define Allgnment4(yNum) ((yNum&0x03)==0?yNum:yNum+4-(yNum&0x03))
#define PackSize(yPack) ( sizeof(LLPack_t) + Allgnment4(yPack->DataNum.u16))

typedef union
{
    uint8_t  u8[4];
    uint32_t u32;
} Word_v;

typedef union
{
    uint8_t  u8[2];
    uint16_t u16;
} HalfWord_v;

typedef enum
{
    LL_Start = 1,
    LL_PackType,
    LL_PackTypeCheck,
    LL_SourceAdd,
    LL_DestinationAdd,
    LL_PackNum,
    LL_DataNum,
    LL_CRC32_1,
    LL_ReceData,
    LL_CRC32_2
	
} LLReceiveState;

typedef struct LLPACK_t
{
    Word_v     StartCheck;  //起始信号检测

    HalfWord_v PackCtrl;    //包控制
    HalfWord_v DataNum;     //数据数量
    HalfWord_v PackNum;     //帧总数量
    HalfWord_v PackCount;   //帧计数
	
    Word_v	   PackCRC;     //帧头CRC
    uint8_t	   Data;        //数据
	                          //通过计算获取数据CRC地址
} LLPack_t;


typedef struct LL_RECEIVE_T
{
    LLPack_t LLPack;         //接收到的数据
    LLReceiveState State;    //接收状态
	  uint8_t  ErrCode;        //错误代码
    uint8_t  Count8;         //接收状态计数
    uint32_t Count32;        //接收数据计数
	  uint8_t * Data;
} LLReceive_t;


#endif

/********************************End of File************************************/

